package com.dier.webservices.restful.model;
import java.util.Date;
import java.util.Iterator;
import java.util.List;

import javax.xml.bind.annotation.XmlRootElement;

import org.codehaus.jackson.annotate.JsonIgnore;
import org.codehaus.jackson.map.annotate.JsonSerialize;

import com.dier.webservices.restful.enumerador.CalificacionEnum;
import com.dier.webservices.restful.enumerador.GeneroEnum;
import com.dier.webservices.restful.util.CustomJsonDateSerializer;

@XmlRootElement(name = "film")
public class Film {
 
    private Integer id;
    private String nombre;
    private String duracion;
    private CalificacionEnum calificacionTp;
    private List<GeneroEnum> generoTp;
    private Date estrenoDt;
    private String sipnosis;
	
    public Film() {
	}

    public Film(Integer id, String nombre, String duracion,
			CalificacionEnum calificacion, List<GeneroEnum> genero,
			Date estreno, String sipnosis) {
		this.id = id;
		this.nombre = nombre;
		this.duracion = duracion;
		this.calificacionTp = calificacion;
		this.generoTp = genero;
		this.estrenoDt = estreno;
		this.sipnosis = sipnosis;
	}
    
	public Integer getId() {
		return id;
	}

	public void setId(Integer id) {
		this.id = id;
	}
	
	public String getNombre() {
		return nombre;
	}

	public void setNombre(String nombre) {
		this.nombre = nombre;
	}
	
	public String getDuracion() {
		return duracion;
	}

	public void setDuracion(String duracion) {
		this.duracion = duracion;
	}
	
	public CalificacionEnum getCalificacion() {
		return calificacionTp;
	}

	public void setCalificacion(CalificacionEnum calificacion) {
		this.calificacionTp = calificacion;
	}
	
	public List<GeneroEnum> getGenero() {
		return generoTp;
	}

	public void setGenero(List<GeneroEnum> genero) {
		this.generoTp = genero;
	}
	
	@JsonSerialize(using=CustomJsonDateSerializer.class)
	public Date getEstreno() {
		return estrenoDt;
	}

	public void setEstreno(Date estreno) {
		this.estrenoDt = estreno;
	}
	
	public String getSipnosis() {
		return sipnosis;
	}

	public void setSipnosis(String sipnosis) {
		this.sipnosis = sipnosis;
	}
	
	/**
	 * Devuelve la descripcion de los generos concatenados
	 * @return 
	 */
	@JsonIgnore
	public String getGeneroFormateado(){
		StringBuilder cadenaGeneros = new StringBuilder();
		for (Iterator<GeneroEnum> genero = getGenero().iterator(); genero.hasNext();) {
			cadenaGeneros.append(genero.next().getDescripcion());
			if (genero.hasNext()) 
				cadenaGeneros.append(" - ");
		}
		return cadenaGeneros.toString();
	}
	
	/**
	 * Devuelve la descripcion de la calificacion
	 * @return
	 */
	@JsonIgnore
	public String getCalificacionFormateado(){
		return getCalificacion().getDescripcion();
	}
}